#include "il2cpp-config.h"
#include "class-internals.h"

#if _MSC_VER

// These structs aren't actually used anywhere, but they are used by the VS debugger visualizer to help visualize various types
namespace VisualizerHelpers
{
	struct Il2CppRawTypeName
	{
		Il2CppClass t;
	};

	struct Il2CppRawTypeNameWithoutDeclaringType
	{
		Il2CppClass t;
	};

	struct Il2CppGenericParameters_DeclaringTypeHas0Parameters
	{
		Il2CppGenericContainer c;
	};

	struct Il2CppGenericParameters_DeclaringTypeHas1Parameters
	{
		Il2CppGenericContainer c;
	};

	struct Il2CppGenericParameters_DeclaringTypeHas2Parameters
	{
		Il2CppGenericContainer c;
	};

	struct Il2CppGenericParameters_DeclaringTypeHas3Parameters
	{
		Il2CppGenericContainer c;
	};

	struct Il2CppGenericParameters_DeclaringTypeHas4Parameters
	{
		Il2CppGenericContainer c;
	};

	struct Il2CppGenericParameters_DeclaringTypeHas5Parameters
	{
		Il2CppGenericContainer c;
	};

	struct Il2CppGenericParameters
	{
		Il2CppGenericContainer c;
	};

	struct Il2CppGenericArguments_DeclaringTypeHas0Arguments
	{
		Il2CppGenericInst gi;
	};

	struct Il2CppGenericArguments_DeclaringTypeHas1Arguments
	{
		Il2CppGenericInst gi;
	};

	struct Il2CppGenericArguments_DeclaringTypeHas2Arguments
	{
		Il2CppGenericInst gi;
	};

	struct Il2CppGenericArguments_DeclaringTypeHas3Arguments
	{
		Il2CppGenericInst gi;
	};

	struct Il2CppGenericArguments_DeclaringTypeHas4Arguments
	{
		Il2CppGenericInst gi;
	};

	struct Il2CppGenericArguments_DeclaringTypeHas5Arguments
	{
		Il2CppGenericInst gi;
	};

	struct Il2CppGenericArguments
	{
		Il2CppGenericClass gi;
	};

	struct Il2CppMethodParameters
	{
		MethodInfo m;
	};

	struct Il2CppMethodGenericParameters
	{
		MethodInfo m;
	};

	struct PreventLinkerFromStrippingTypesFromDebugInfo
	{
		Il2CppRawTypeName* ___rawTypeName;
		Il2CppRawTypeNameWithoutDeclaringType* ___rawTypeNameWithoutDeclaringType;
		Il2CppGenericParameters_DeclaringTypeHas0Parameters* ___genericParameters0;
		Il2CppGenericParameters_DeclaringTypeHas1Parameters* ___genericParameters1;
		Il2CppGenericParameters_DeclaringTypeHas2Parameters* ___genericParameters2;
		Il2CppGenericParameters_DeclaringTypeHas3Parameters* ___genericParameters3;
		Il2CppGenericParameters_DeclaringTypeHas4Parameters* ___genericParameters4;
		Il2CppGenericParameters_DeclaringTypeHas5Parameters* ___genericParameters5;
		Il2CppGenericParameters* ___genericParameters;
		Il2CppGenericArguments_DeclaringTypeHas0Arguments* ___genericArguments0;
		Il2CppGenericArguments_DeclaringTypeHas1Arguments* ___genericArguments1;
		Il2CppGenericArguments_DeclaringTypeHas2Arguments* ___genericArguments2;
		Il2CppGenericArguments_DeclaringTypeHas3Arguments* ___genericArguments3;
		Il2CppGenericArguments_DeclaringTypeHas4Arguments* ___genericArguments4;
		Il2CppGenericArguments_DeclaringTypeHas5Arguments* ___genericArguments5;
		Il2CppGenericArguments* ___genericArguments;
		Il2CppMethodParameters* ___methodParameters;
		Il2CppMethodGenericParameters* ___methodGenericParameters;
	};
}

// We need to declare a global variable, otherwise compiler strips all type information from PDBs, and in result debugger can't visualize them
extern "C" VisualizerHelpers::PreventLinkerFromStrippingTypesFromDebugInfo* ____visualizerHelpersPreventLinkerStripping = NULL;

#endif
